package com.cnswhy.cloud.server.core.dto;

import java.beans.Transient;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 描述: 购物车商户
 * 版权: Copyright (c) 2019
 * 公司: 小鹿科技
 * 作者: 张润泽
 * 版本: 1.0
 * 创建日期: 2019年8月27日
 * 创建时间: 下午5:10:57
 */
public class BuyerMerchant implements Serializable
{

    private static final long serialVersionUID = 1L;

    /**
     * 商户id
     */
    private Long merchantId;

    /**
     * 商户名称
     */
    private String merchantName;

    /**
     * 运费小计
     */
    @SuppressWarnings("unused")
    private BigDecimal subFreightPrice;

    /**
     * 小计
     */
    @SuppressWarnings("unused")
    private BigDecimal subtotal;

    /**
     * 数量小计
     */
    @SuppressWarnings("unused")
    private Integer subNum;

    /**
     * 商品结果集
     */
    private List<BuyerItem> items = new ArrayList<BuyerItem>();

    //计算商品小计金额
    public BigDecimal getSubtotal()
    {
        BigDecimal result = BigDecimal.ZERO;
        for (BuyerItem item : items)
        {
            if (item.getSku() != null && item.getSku().getPrice() != null)
            {
                result = result.add(item.getSku().getPrice().multiply(new BigDecimal(item.getNum())));
            }
        }
        return result;
    }

    public void setSubtotal(BigDecimal subtotal)
    {
        this.subtotal = subtotal;
    }

    //计算运费小计金额
    public BigDecimal getSubFreightPrice()
    {
        BigDecimal result = BigDecimal.ZERO;
        for (BuyerItem item : items)
        {
            if (item.getFreightPrice() != null)
            {
                result = result.add(item.getFreightPrice());
            }
        }
        return result;
    }

    public void setSubFreightPrice(BigDecimal subFreightPrice)
    {
        this.subFreightPrice = subFreightPrice;
    }

    // 计算数量小计
    public Integer getSubNum()
    {
        Integer result = 0;
        for (BuyerItem item : items)
        {
            result += item.getNum();
        }
        return result;
    }

    public void setSubNum(Integer subNum)
    {
        this.subNum = subNum;
    }

    /**
     * 描述：添加购物项到商户
     * 作者：张润泽
     * 时间：2019年8月27日 下午6:22:09
     * @param item
     */
    @Transient
    public void addItem(BuyerItem item)
    {
        //判断是否包含同款
        if (items.contains(item))
        {
            //追加数量
            for (BuyerItem buyerItem : items)
            {
                if (buyerItem.equals(item))
                {
                    buyerItem.setNum(item.getNum() + buyerItem.getNum());
                }
            }
        }
        else
        {
            items.add(item);
        }
    }

    /**
     * 描述：添加购物项到商户
     * 作者：张润泽
     * 时间：2019年8月27日 下午6:22:09
     * @param item
     */
    @Transient
    public void addItem(List<BuyerItem> buyerItems)
    {
        for (BuyerItem item : buyerItems)
        {
            //判断是否包含同款
            if (items.contains(item))
            {
                //追加数量
                for (BuyerItem buyerItem : items)
                {
                    if (buyerItem.getSku().getStockId().equals(item.getSku().getStockId()))
                    {
                        buyerItem.setNum(item.getNum() + buyerItem.getNum());
                    }
                }
            }
            else
            {
                items.add(item);
            }
        }
    }

    public Long getMerchantId()
    {
        return merchantId;
    }

    public void setMerchantId(Long merchantId)
    {
        this.merchantId = merchantId;
    }

    public String getMerchantName()
    {
        return merchantName;
    }

    public void setMerchantName(String merchantName)
    {
        this.merchantName = merchantName;
    }

    public List<BuyerItem> getItems()
    {
        return items;
    }

    public void setItems(List<BuyerItem> items)
    {
        this.items = items;
    }
}
